//package com.tanger.common.socket;
//
//import com.alibaba.fastjson.JSONObject;
//import com.brtbeacon.mapdata.escaperoutes.entity.EvacuationDistribute;
//import com.brtbeacon.mapdata.escaperoutes.service.EvacuteIssuService;
//import com.brtbeacon.mapdata.utils.BeanUtils;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//import javax.websocket.*;
//import javax.websocket.server.PathParam;
//import javax.websocket.server.ServerEndpoint;
//import java.io.IOException;
//import java.util.Optional;
//
//@Slf4j
//@Service
//@ServerEndpoint("/map-poi/warn-issu/{pId}/{bId}")
//public class IssuWebSocket {
//
//    /**
//     * redis client
//     */
//    private static UserCaches caches;
//    private static EvacuteIssuService service;
//    private static IssuRedisPublisher publisher;
//
//    @Autowired
//    public void initCaches(UserCaches caches) {
//        IssuWebSocket.caches = caches;
//    }
//    @Autowired
//    public void initIssuService(EvacuteIssuService service) {
//        IssuWebSocket.service = service;
//    }
//    @Autowired
//    public void initPublisher(IssuRedisPublisher publisher) {
//        IssuWebSocket.publisher = publisher;
//    }
//
//    /**
//     *
//     * @param session
//     * @param pId 项目ID
//     * @param bId 建筑ID
//     */
//    @OnOpen
//    public void onOpen(Session session,@PathParam("pId") String pId,@PathParam("bId") String bId) {
//        // 初始化缓存数据
//        NoticePushUser user = caches.create(pId, bId, session);
//
//        // 将提示推送给当前用户
////        EvacuationDistribute as = service.findOne(pId,bId);
//        NoticePushData pu = new NoticePushData();
//        pu.setUid(session.getId());
////        if (Objects.nonNull(as)) {
////            IssuData issu = BeanUtils.copyProperties(as,new IssuData());
////            pu.setData(issu);
////        }
//        send(session, pu);
//    }
//
//    private IssuData toMap(EvacuationDistribute d) {
//        return BeanUtils.copyProperties(d,new IssuData());
//    }
//
//    /**
//     * @param session
//     * @param pId
//     * @param bId
//     */
//    @OnClose
//    public void onClose(Session session, @PathParam("pId") String pId, @PathParam("bId") String bId) {
//        // 移除缓存数据
//        NoticePushUser user = caches.remove(pId, bId, session);
//        if (user.getUid() == null) return;
//    }
//
//    /**
//     * @param session
//     * @param pId
//     * @param bId
//     * @param error
//     */
//    @OnError
//    public void onError(Session session, @PathParam("pId") String pId, @PathParam("bId") String bId, Throwable error) {
//        String uid = caches.getUser(pId, bId, session);
//        log.error("[issu-push] uid: "+uid+" on error", error);
//    }
//
//    /**
//     * @param session
//     * @param message
//     * @param pId
//     * @param bId
//     */
//    @OnMessage
//    public void onMessage(Session session, String message, @PathParam("pId") String pId, @PathParam("bId") String bId) {
//        log.info("[issu-push] on message pId: {}, bId: {}, data: {}", pId, bId, message);
//        // 将提示推送给当前用户
//        IssuData issu = Optional.ofNullable(service.findOne(pId,bId))
//                .map(this::toMap)
//                .orElseGet(null);
//        NoticePushData pu = new NoticePushData(session.getId(),issu);
//        send(session, pu);
//    }
//
//    /**
//     * 推送消息
//     * @param session
//     * @param obj
//     */
//    private void send(Session session, Object obj) {
//        String text = JSONObject.toJSONString(obj);
//        log.info("[issu-push] session: {}, send message data: {}", session.getId(), text);
//
//        try {
//            session.getBasicRemote().sendText(text);
//        } catch (IOException e) {
//            log.error("[issu-push] send message error", e);
//        }
//    }
//}
